package com.w7vm.menuweb.facade;


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;


import com.w7vm.menuweb.dao.CardapioInfantilDAO;
import com.w7vm.menuweb.dao.CardapioLaCarteDAO;
import com.w7vm.menuweb.entity.CardapioBuffetWeb;
import com.w7vm.menuweb.entity.CardapioInfantilWeb;
import com.w7vm.menuweb.entity.CardapioLaCarteWeb;
import com.w7vm.menuweb.entity.PratoSy;
import com.w7vm.menuweb.utility.ConstantesEJB;
import com.w7vm.menuweb.vo.CardapioVO;


@Stateless(name="CardapioG2EJB")
@Remote(CardapioG2Facade.class)

public class CardapioG2FacadeImp implements CardapioG2Facade {

	
	
	@EJB
	private CardapioInfantilDAO infantilEJB;
	private CardapioInfantilWeb infantilEntity = new CardapioInfantilWeb();  
	
		
	@EJB
	private CardapioLaCarteDAO laCarteEJB;
	private CardapioLaCarteWeb laCarteEntity = new CardapioLaCarteWeb();  

	ConstantesEJB constEJB = new ConstantesEJB();

	
//======== :: METHODs - CARDAPIO INFANTIL ::======================================================== //

	@Override
	public Long buscaQtdeCardapioInfantilAtivo(int idRestaurante, String tipo) {
		return infantilEJB.countCardapioInfantilAtivo(idRestaurante, tipo);
	}
	
	@Override
	public int saveInfantil(CardapioInfantilWeb infantilEntity) {
		return infantilEJB.saveCardapioInfantil(infantilEntity);
	}

	@Override
	public CardapioInfantilWeb updateInfantil(CardapioInfantilWeb infantilEntity) {
		return infantilEJB.mergeUpdate(infantilEntity);
	}

	@Override
	public void deleteInfantil(int id) {
		infantilEJB.deleteCardapioInfantil(id);
	}

	@Override
	public List<CardapioInfantilWeb> findInfantilByIDRestauranteSede(int id) {
		return infantilEJB.findCardapioInfantilByIDRestauranteSede(id);
	}

	@Override
	public List<CardapioInfantilWeb> findInfantilByIDRestauranteFilial(int id) {
		return infantilEJB.findCardapioInfantilByIDRestauranteFilial(id);
	}
	
	public CardapioInfantilWeb setCardapioInfantilEntity(CardapioVO cardapioVO){
   		System.out.println("[Method][setCardapioInfantilEntity]");
   		PratoSy pratoObj = new PratoSy();
   		
   		//infantilEntity.setIdCardapioInfantilWeb(cardapioVO.getIdCardapioInfantilWeb());
   		infantilEntity.setNomePrato(cardapioVO.getNomePrato());
   		infantilEntity.setEntradasFrias(cardapioVO.getEntradasFrias());
   		infantilEntity.setEntradasQuentes(cardapioVO.getEntradasQuentes());
   		infantilEntity.setSobremesa(cardapioVO.getSobremesa());
   		infantilEntity.setCouvert(cardapioVO.getCouvert());
   		infantilEntity.setAcompanhamento(cardapioVO.getAcompanhamento());
   		infantilEntity.setDiasSemana(cardapioVO.getDiasSemana());
   		infantilEntity.setDtInicio(cardapioVO.getDtInicio());
   		infantilEntity.setDtCadastro(cardapioVO.getDtCadastro());
   		infantilEntity.setDtTermino(cardapioVO.getDtTermino());
   		infantilEntity.setComposicaoCardInfantilWebs(cardapioVO.getComposicaoCardInfantilL()); 
		pratoObj.setIdPratoSys(cardapioVO.getCategoriaPratoID());
		infantilEntity.setPratoSy(pratoObj);

		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());
		

		if(dateToday.equals(dateCard)){
			infantilEntity.setStatus(constEJB.ATIVO);
  		}
		else if(cardapioVO.getStatus() == constEJB.AGENDADO_ATIVACAOs){
			infantilEntity.setStatus(constEJB.AGENDADO_ATIVACAO);
  	  	}
  	  	else if(cardapioVO.getStatus() == constEJB.ATIVOs){
  	  		infantilEntity.setStatus(constEJB.ATIVO);
  		}
		return infantilEntity;
	}
	
	public CardapioVO setCardapioInfantilVO(CardapioInfantilWeb infantilEntity){
  		System.out.println("[Method][setCardapioInfantilVO]");

		CardapioVO cardapioVO = new CardapioVO();
		cardapioVO.setIdCardapioInfantilWeb(infantilEntity.getIdCardapioInfantilWeb());
  		cardapioVO.setNomePrato(infantilEntity.getNomePrato());
  		cardapioVO.setEntradasFrias(infantilEntity.getEntradasFrias());
  		cardapioVO.setEntradasQuentes(infantilEntity.getEntradasQuentes());
  		cardapioVO.setSobremesa(infantilEntity.getSobremesa());
  		
  		// Entity: PratoSy
  		cardapioVO.setCategoriaPratoNome(infantilEntity.getPratoSy().getDescricao());
  		cardapioVO.setCategoriaPratoID(infantilEntity.getPratoSy().getIdPratoSys());
  		cardapioVO.setObjPratoSy(infantilEntity.getPratoSy());

  		DateFormat dtFormat = new SimpleDateFormat("dd/MM/yyyy");
  		String dateInicio = dtFormat.format(infantilEntity.getDtInicio());
  		String dateFim = dtFormat.format(infantilEntity.getDtTermino());
  		
  		try {
			cardapioVO.setDtInicio(dtFormat.parse(dateInicio));
	  		cardapioVO.setDtTermino(dtFormat.parse(dateFim));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  		cardapioVO.setCouvert(infantilEntity.getCouvert());
  		cardapioVO.setAcompanhamento(infantilEntity.getAcompanhamento());
  		cardapioVO.setDtCadastro(infantilEntity.getDtCadastro());
  		cardapioVO.setDiasSemana(infantilEntity.getDiasSemana());
  		
  		if(infantilEntity.getStatus() == constEJB.AGENDADO_ATIVACAO){
  			cardapioVO.setStatus(constEJB.AGENDADO_ATIVACAOs);
  		}
  		else if(infantilEntity.getStatus() == constEJB.ATIVO){
  			cardapioVO.setStatus(constEJB.ATIVOs);
  		}
  		else if(infantilEntity.getStatus() == constEJB.INATIVO){
  			cardapioVO.setStatus(constEJB.INATIVOs);
  		}
  		return cardapioVO;
	}

	
	@Override
	public CardapioInfantilWeb findInfantilByID(int id){
  		System.out.println("[MEthod][findInfantilByID]");
		return infantilEJB.findCardapioInfantilByID(id);
	}
	
  	@Override
  	public int updateStatusCardapioInfantil(CardapioInfantilWeb infantilEntity) {
  		return infantilEJB.alterarStatusCardapioInfantil(infantilEntity);
  	}


	
//======== :: METHODs - CARDAPIO LA CARTE ::======================================================== //
	
	@Override
	public Long buscaQtdeCardapioLaCarteAtivo(int idRestaurante, String tipo) {
		return laCarteEJB.countCardapioLaCarteAtivo(idRestaurante, tipo);
	}
	
  	@Override
  	public int updateStatusCardapioLaCarte(CardapioLaCarteWeb laCarteEntity) {
  		return laCarteEJB.alterarStatusCardapioLaCarte(laCarteEntity);
  	}

	@Override
	public CardapioLaCarteWeb findLaCarteByID(int id){
  		System.out.println("[METHOD][findInfantilByID]");
		return laCarteEJB.findCardapioLaCarteByID(id);
	}
	
	@Override
	public int saveLaCarte(CardapioLaCarteWeb laCarteEntity) {
  		System.out.println("[METHOD][saveLaCarte]");
		return laCarteEJB.saveCardapioLaCarte(laCarteEntity);
	}

	@Override
	public CardapioLaCarteWeb updateLaCarte(CardapioLaCarteWeb laCarteEntity) {
		return laCarteEJB.mergeUpdate(laCarteEntity);
	}
	


	@Override
	public void deleteLaCarte(int id) {
		laCarteEJB.deleteCardapioLaCarte(id);
	}

	@Override
	public List<CardapioLaCarteWeb> findLaCarteByIDRestauranteSede(int id) {
		return laCarteEJB.findCardapioLaCarteByIDRestauranteSede(id);
	}
	
	@Override
	public List<CardapioLaCarteWeb> findLaCarteByIDRestauranteFilial(int id) {
		return laCarteEJB.findCardapioLaCarteByIDRestauranteFilial(id);
	}
	
	public CardapioLaCarteWeb setCardapioLaCarteEntity(CardapioVO cardapioVO){
   		System.out.println("[Method][setCardapioLaCarteEntity]  "+ cardapioVO.getIdCardapioLaCarteWeb());
		PratoSy pratoObj = new PratoSy();

   		// laCarteEntity.setIdCardapioLaCarteWeb(cardapioVO.getIdCardapioLaCarteWeb());
   		laCarteEntity.setNomePrato(cardapioVO.getNomePrato());
   		laCarteEntity.setEntradasFrias(cardapioVO.getEntradasFrias());
   		laCarteEntity.setEntradasQuentes(cardapioVO.getEntradasQuentes());
   		laCarteEntity.setSobremesa(cardapioVO.getSobremesa());
   		laCarteEntity.setCouvert(cardapioVO.getCouvert());
   		laCarteEntity.setAcompanhamento(cardapioVO.getAcompanhamento());
   		laCarteEntity.setDiasSemana(cardapioVO.getDiasSemana());
   		laCarteEntity.setDtInicio(cardapioVO.getDtInicio());
   		laCarteEntity.setDtCadastro(cardapioVO.getDtCadastro());
   		laCarteEntity.setDtTermino(cardapioVO.getDtTermino());
   		laCarteEntity.setComposicaoCardLaCarteWebs(cardapioVO.getComposicaoCardLaCarteL()); 
		pratoObj.setIdPratoSys(cardapioVO.getCategoriaPratoID());
		laCarteEntity.setPratoSy(pratoObj);

   		System.out.println("[Method][cardapioVO.getStatus()]......................................"+ cardapioVO.getStatus());
   		
		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());


		if(dateToday.equals(dateCard)){
			laCarteEntity.setStatus(constEJB.ATIVO);
  		}
		else if(cardapioVO.getStatus() == constEJB.AGENDADO_ATIVACAOs){
			laCarteEntity.setStatus(constEJB.AGENDADO_ATIVACAO);
  	  	}
  	  	else if(cardapioVO.getStatus() == constEJB.ATIVOs){
  	  		laCarteEntity.setStatus(constEJB.ATIVO);
  		}
  		
		return laCarteEntity;
	}

	public CardapioVO setCardapioLaCarteVO(CardapioLaCarteWeb laCarteEntity){
		System.out.println("[Method][setCardapioLaCarteVO]");
		CardapioVO cardapioVO = new CardapioVO();
		
		cardapioVO.setIdCardapioLaCarteWeb(laCarteEntity.getIdCardapioLaCarteWeb());
  		cardapioVO.setNomePrato(laCarteEntity.getNomePrato());
  		cardapioVO.setEntradasFrias(laCarteEntity.getEntradasFrias());
  		cardapioVO.setEntradasQuentes(laCarteEntity.getEntradasQuentes());
  		cardapioVO.setSobremesa(laCarteEntity.getSobremesa());
  		
  		// Entity: PratoSy
  		cardapioVO.setCategoriaPratoNome(laCarteEntity.getPratoSy().getDescricao());
  		cardapioVO.setCategoriaPratoID(laCarteEntity.getPratoSy().getIdPratoSys());
  		cardapioVO.setObjPratoSy(laCarteEntity.getPratoSy());

  		System.out.println("setCardapioLaCarteVO..................................."+ cardapioVO.getCategoriaPratoID());

  		
  		DateFormat dtFormat = new SimpleDateFormat("dd/MM/yyyy");
  		String dateInicio = dtFormat.format(laCarteEntity.getDtInicio());
  		String dateFim = dtFormat.format(laCarteEntity.getDtTermino());
  		
  		try {
			cardapioVO.setDtInicio(dtFormat.parse(dateInicio));
	  		cardapioVO.setDtTermino(dtFormat.parse(dateFim));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  		cardapioVO.setCouvert(laCarteEntity.getCouvert());
  		cardapioVO.setAcompanhamento(laCarteEntity.getAcompanhamento());
  		cardapioVO.setDtCadastro(laCarteEntity.getDtCadastro());
  		cardapioVO.setDiasSemana(laCarteEntity.getDiasSemana());
  		
  		if(laCarteEntity.getStatus() == constEJB.AGENDADO_ATIVACAO){
  			cardapioVO.setStatus(constEJB.AGENDADO_ATIVACAOs);
  		}
  		else if(laCarteEntity.getStatus() == constEJB.ATIVO){
  			cardapioVO.setStatus(constEJB.ATIVOs);
  		}
  		else if(laCarteEntity.getStatus() == constEJB.INATIVO){
  			cardapioVO.setStatus(constEJB.INATIVOs);
  		}
  		return cardapioVO;
	}

}
